package com.jade.journal.desc.field;

import com.jade.journal.JournalConstants;

/**
 * 日志字段描述
 *
 * @author fengyun
 * @version Jan 10, 2003 12:45:31 PM
 */
public class Field
{
    /** 字段名称 */
    private String name;

    /** 字段索引 */
    private int index;

    private String internalName;
    /** 字段类型 */
    private FieldType type = FieldType.getDefault();

    /** 是否是内部字段 */
    private transient boolean internal = false;

    /** 构造 */
    public Field()
    {
    }

    /**
     * 构造字段描述
     *
     * @param name  字段名称
     * @param index 字段索引
     * @param type  字段类型
     */
    public Field(String name, int index, String type)
    {
        setName(name);
        setIndex(index);
        setType(type);
    }

    /**
     * 返回字段名
     *
     * @return 字段名
     */
    public String getName()
    {
        return name;
    }

    /**
     * 设置名称
     *
     * @param name 字段名称
     */
    public void setName(String name)
    {
        this.name = name;
        internal = name.startsWith(JournalConstants.INTERNAL_FIELD_PREFIX);
        if (internal) {
            this.name = name.substring(JournalConstants.INTERNAL_FIELD_PREFIX_LEN);
        }
    }

    /**
     * 返回字段索引
     *
     * @return 字段索引
     */
    public int getIndex()
    {
        return index;
    }

    /**
     * 设置索引
     *
     * @param index 索引
     */
    public void setIndex(int index)
    {
        this.index = index;
    }

    /**
     * 返回字段类型
     *
     * @return 字段类型
     */
    public FieldType getType()
    {
        return type;
    }

    /** 设置字段类型 */
    public void setType(String type)
    {
        this.type = FieldType.getType(type);
    }

    /**
     * 返回字符串信息
     *
     * @return 字符串信息
     */
    public String toString()
    {
        return getName();
    }

    public boolean isInternal()
    {
        return internal;
    }


    public String getInternalName()
    {
        return internalName;
    }


    public void setInternalName(String internalName)
    {
        this.internalName = internalName;
    }
}
